package com.tinet.sistReserva.ejb;

import java.util.ArrayList;

import javax.ejb.Remote;

import com.tinet.sistReserva.model.Usuario;
import com.tinet.sistReserva.model.util.UsuarioException;
import com.tinet.sistReserva.model.util.UsuarioNoEncontradoException;

/**
 * 
 * Interfaz que define los metodos a implementar por la clase UsuarioBean.
 * 
 * @author Frmancil
 */
@Remote
public interface InterfazUsuarioBean {
    /**
     * 
     * Metodo que recibe un usuario creado desde la capa web y lo envia la
     * capa DAO para insertarlo en la base de datos.
     * 
     * @param nuevoUsuario
     *            Usuario a ingresar.
     * @throws UsuarioException
     *             Excepcion cuando encuentra usuario.
     */
    void agregarUsuario(Usuario nuevoUsuario) throws UsuarioException;

    /**
     * 
     * Metodo que recibe un usuario para ser eliminado de la base de datos.
     * 
     * @param usuarioAEliminar
     *            Usuario a eliminar.
     * @throws UsuarioException
     *             Si usuario a eliminar no existe lanza error.
     */
    void eliminarUsuario(Usuario usuarioAEliminar) throws UsuarioException;

    /**
     * 
     * Metodo que recibe un usuario, lo manda a buscar dentro de base de datos
     * y si lo encuentra actualiza sus atributos.
     * 
     * @param usuarioAActualizar
     *            Usuario a actualizar.
     * @throws UsuarioException
     *             Lanza Excepcion si usuario a actualizar no es encontrado en
     *             base de datos.
     */
    void actualizarUsuario(Usuario usuarioAActualizar) throws UsuarioException;

    /**
     * 
     * Metodo que retorna una lista de los usuarios que se encuentran en la
     * base de datos.
     * 
     * @return Retorna una lista de usuarios.
     */
    ArrayList<Usuario> listarUsuarios();

    /**
     * 
     * Metodo que valida si usuario que ingrese al sistema es administrador,
     * normal o no esta registrado.
     * 
     * @param usuarioAIngresar
     *            Usuario a ingresar.
     * @return Si el usuario existe retorna verdadero, si no existe retorna
     *         falso.
     * 
     * @throws UsuarioNoEncontradoException
     *             Lanza excepcion para usuario no encontrado.
     */
    Usuario loginUsuario(Usuario usuarioAIngresar)
            throws UsuarioNoEncontradoException;

    /**
     * 
     * Metodo que busca un usuario dentro de la base de datos.
     * 
     * @param usuarioABuscar
     *            Es el usuario que se busca en la base de datos.
     * @return Retorna el usuario encontrado.
     * @throws UsuarioException
     *             Lanza Excepcion si usuario no es encontrado en base de
     *             datos.
     */
    Usuario buscarUsuario(Usuario usuarioABuscar) throws UsuarioException;

    /**
     * 
     * Metodo que busca usuario agregado.
     * 
     * @param usuarioABuscar
     *            Usuario a buscar en base de datos.
     * @return Retorna usuario encontrado.
     * @throws UsuarioException
     *             Lanza Excepcion si usuario buscado no es encontrado en la
     *             base de datos.
     */
    Usuario buscarUsuarioAgregado(Usuario usuarioABuscar)
            throws UsuarioException;
}
